Uvod

Baze podataka nam služe da bi u njih spremali podatke, a ti podaci su istovremeno dostupni raznim korisnicima i aplikacijskim programima. Pohranjene podatke koristimo po potrebi, ali ponekad nam nisu potrebni svi podaci iz baze već samo određeni. Njih dobivamo kreiranjem raznih upita, a upite kreiramo select naredbom. Kako bismo prikazali na konkretnim primjerima uporabu select naredbe prvo ćemo kreirati bazu podataka s potrebnim tablicama i vrijednostima.

Kreiranje baze, tablica i dodavanje vrijednosti u tablice

Za vježbu pokušajte sami kreirati bazu na osnovu ERA dijagrama sa Slike 1., a ukoliko negdje zapnete poslužite se uputama.

Slika 1. - ERA dijagram na osnovu kojeg treba napraviti bazu podataka

Za početak je potrebno kreirali bazu ict s create naredbom, upisujemo naredbu use kako bi program prepoznao da ćemo koristiti ict bazu. Iduće što nam je potrebno jesu tablice koje također kreiramo pomoću naredbe create. Nazivi atributa, tipovi podataka, primarni i vanjski ključevi te not null vrijednosti su nam definirane u ERA dijagramu.

Slika 2. - Kreiranje baze ict i tablica u MySQL-u

Pomoću naredbe alter dodajemo strane ključeve i tako povezujemo tablice.

Slika 3. - Dodavanje stranih ključeva pomoću naredbe alter

Sada pred sobom imamo jednu bazu ict s tablicama studenti, mjesto, fakultet, profesori, predmeti te rad. Slijedi unos podataka pomoću naredbe insert. Samostalno unesite najmanje 5 zapisa u svaku tablicu. Na Slici 3. možete vidjeti primjer insert naredbe kako bi se podsjetili načina na koji ona radi.

Slika 4. - Primjer insert naredbe

Select naredba na jednoj tablici

Sada kada smo unijeli vrijednosti u tablice potrebno je naučiti kako izvući točno određene podatke koji su nam potrebni za određenu svrhu. Za to će nam koristiti select naredba i za početak ćemo prikazati primjer jednostavne select naredbe koja će nam prikazati sve podatke iz jedne tablice.

Slika 5. - Prikaz jednostavne select naredbe

U ovom primjeru smo pomoću select naredbe dobili sve podatke iz tablice studenti. Select naredba funkcionira na sljedeći način: prvo upisujemo samo naredbu select, zatim navodimo imena stupaca koje želimo obuhvatiti, u ovom slučaju smo postavili znak * što znači da će obuhvatit sve stupce u tablici. Iduća stvar koju navodimo je klauzula from kojom određujemo iz koje tablice ćemo izvući podatke te na kraju navodimo samo ime tablice. Umjesto * probajte napisati ime ili godinu i dobit ćete samo podatke o imenima ili godinama studenata.

U prethodnom primjeru prikazali smo izvođenje jednostavne select naredbe koja će nam dohvatiti sve podatke iz određene tablice, u idućem primjeru prikazat ćemo na koji način možemo postaviti upit da nam prikaže samo određene podatke iz tablice.

Slika 6. - Prikaz upita s where izrazom

U ovom primjeru smo, pored jednostavne select naredbe koja će nam prikazati sve podatke iz tablice studenti, dodali izraz where koji je ključni dio select naredbe jer se u tom dijelu filtriraju podaci i iz baze dobivamo samo željene podatke. Nakon što smo u upitu napisali izraz where upisujemo uvjet koji će nam prikazati stupac iz tablice studenti čija je sifra broj 2.

Za filtriranje koristimo operatore koji nam pomažu da dobijemo željene podatke iz baze. Postoje tri vrste operatora: operatori uspoređivanja, logički operatori i ostali operatori. U idućem primjeru prikazat ćemo uporabu operatora uspoređivanja.

Slika 7. - Primjer uporabe operatora uspoređivanja

U ovom primjeru smo u select naredbi odabrali stupce sifra i prezime iz tablice studenti te smo postavili uvjet koji će nam prikazati sve retke čija je sifra veća ili jedanka broju 3.

Operatori uspoređivanja su:

> , < , = , >= , <= , !=

Operatori uspoređivanja su nam korisni kada radimo s brojčanim podacima. U idućem primjeru prikazat ćemo kako se koriste logički operatori.

Slika 8. - Primjer uporabe logičkih operatora

U ovom primjeru smo u select naredbi odabrali stupce ime i prezime iz tablice studenti te smo postavili uvjet koji će nam prikazati sve podatke čija je sifra veća ili jednaka broju 2 i manja ili jednaka broju 4. Logički operator u ovom primjeru je izraz and kojim smo dodatno ograničili naše pretraživanje. Pored izraza and, logički operatori su i or i not. U idućem primjeru prikazat ćemo uporabu ostalih operatora.

Slika 9. - Primjer uporabe ostalih operatora

U ovom primjeru smo u select naredbi odabrali stupce ime i prezime iz tablice studenti te smo postavili uvjet koji će nam prikazati sve studente čije prezime ne završava na ić. Od ostalih operatora u ovom primjeru koristili smo not like te kod njega i kod operatora like izraz po kojem pretražujemo stavljamo u navodnike i stavljamo znak %. Ako stavimo znak % na početku to znači da će nam se prikazati rezultati koji završavaju s izrazom kojeg zadamo, u ovom slučaju to je izraz ić. Ako stavimo znak % na kraj to znači da će nam se prikazati rezultati koji započinju s izrazom kojeg zadamo.

Za primjer probajte umjesto '%ić' upisati 'Iv%' i dobit ćete studente čije prezime ne počinje s Iv. Današnja pretraživanja na internetu rade na način da se postavi like operator i mi upisujemo u tražilicu pojam koji se automatski postavlja između ova dva znaka '%neki pojam%' i tako dobijemo iz baze podatke koji bilo gdje u svom izrazu imaju pojam koji smo mi unijeli prilikom pretraživanja.

Ostali operatori su:

in , between , is null , is not null

Dosadašnje select naredbe koje smo radili odnosile su se na dohvaćanje podataka iz jedne tablice. U idućim primjerima prikazat ćemo na koje načine povezujemo tablice i dohvaćamo podatke iz više tablica istovremeno.

Select naredba kroz više tablice

Select naredba na jednoj tablici nam dozvoljava da dohvatimo i filtriramo podatke samo iz jedne tablice. To se jako rijetko radi u praksi jer su tablice međusobno povezane vanjskim ključevima i podatkovno su ovisne jedne o drugima. Kada želimo dohvatiti podatke iz više tablice potrebno je slijediti slijedeće upute:

Imati ispred sebe ERA dijagram

Napisati select i ostaviti select listu praznu

Napisati from dio i pospajati tablice prema uvjetima vanjskih ključeva

Napisati uvjete za filtriranje (where)

Napisati kolone koje želimo u select dio

U idućem primjeru ćemo prikazati select naredbu koja će prikazati imena studenata čiji radovi imaju u naslovu Aristotela. Za početak nam je potreban ERA dijagram kojeg smo prethodno izradili u MySQL-u ili jednostavno nacrtali ga na papiru, bitno nam je da prepoznamo koje su tablice povezane vanjskim ključevima.

Slika 10. - Prvi korak u spajanju više tablica: ERA dijagram ict baze podataka

Idući korak je da napišemo select naredbu i ostavimo select listu praznu, nju ćemo zadnju popunjavati. To radimo jer ćemo imenima tablica kasnije dodavati zamjenske, kraće nazive zbog lakšeg povezivanja tablica.

Slika 11. - Drugi korak u spajanju više tablica

Nakon toga upisujemo from dio naredbe. Tu upisujemo imena tablica koje želimo povezati. One su prethodno povezane vrijednostima vanjskih ključeva.

Slika 12. - Treći korak u spajanju više tablica

Sada smo napravili ključni korak za spajanje tablica i jako je bitno da shvatite što smo sve sada točno napravili. Kako nam je cilj prikazati studente čiji radovi imaju u naslovu Aristotela uzeli smo prvo tablicu studenti i slovo a koje smo dodali nakon naziva tablice predstavlja zamjenski naziv za tablicu. Zamjenski naziv koristimo zato da ne moramo stalno upisivati studenti, već samo upišemo slovo a i program će odmah prepoznati da se radi o tablici studenti. Zatim smo dodali jedan od načina spajanja tablica koji se najviše koristi, a to je inner join koji funkcionira na način da prikazuje sve rezultate gdje postoji podudaranje vanjskog ključa. Zatim smo dodali naziv druge tablice koja nam je potrebna, tj. rad, i dali smo joj kraći, zamjenski naziv slovo b. Zatim upisujemo oznaku on te upisujemo sada zamjenski naziv tablica a i b, koje povezujemo te vanjske ključeve po kojima smo ih prethodno povezali kada smo kreirali tablice. Nakon toga upisujemo where dio.

Slika 13. - Četvrti korak u spajanju više tablica

Sada smo postavili uvjet po kojem ćemo iz tablice b, odnosno tablice rad dobiti naslov koji u sebi sadrži riječ Aristotel i to smo učinili s operatorom like. Zadnji korak jest da ispišemo select listu koju smo prethodno ostavili praznu.

Slika 14. - Peti korak u spajanju više tablica

Sada smo u select naredbi odabrali tablice (npr. a) i kolone (npr. ime) iz tablica koje želimo prikazati. Nakon što smo proveli upit kroz dvije tablice dobili smo slijedeće:

Slika 15. - Konačan primjer upita kroz dvije tablice

Pored inner join-a kao načina spajanja postoje right i left join. Left join prikazuje sve podatke iz lijeve tablice odnosno tablice koju navedemo prvu u from dijelu, a iz desne tablice prikazuje samo one podatke gdje postoji podudaranje vanjskog ključa. Right join radi na istom principu kao i left join, prikazuje sve podatke iz desne tablice, a iz lijeve prikazuje samo one podatke gdje postoji podudaranje vanjskog ključa. U idućem primjeru prikazat ćemo kako funkcionira left join.

Slika 16. - Primjer left join-a

U ovom primjeru smo prikazali sve studente i njihove radove. S obzirom da smo koristili left join dobili smo sve studente, čak i one koji nemaju niti jedan rad. Da smo koristili inner join onda nam se ne bi prikazao student koji nema rad. Probajte upisati inner join umjesto left join.

Do sada smo prikazali princip spajanja tablica i proveli smo upit kroz jednu i dvije tablice, sada ćemo prikazati upit koji će proći kroz tri tablice. Recimo da želimo saznati ime, prezime i naslov rada studenata koji pišu rad iz predmeta Povijest. To možemo učiniti, ali moramo povezati tablice studenti, rad i predmeti.

Slika 17. - Primjer upita kroz tri tablice

Princip spajanja tri tablice je isti kao i kod dvije samo što dodajemo još jednu tablicu i jedno slovo, tj. c. Prvo smo napisali select naredbu i ostavili je praznu. Zatim smo ispisali prvu tablicu student a, koju smo je spojili s drugom tablicom rad b, a spojili smo ih tamo gdje im se podudaraju vanjski ključevi. Slijedeće smo spojili tablicu rad, tj. b, s tablicom predmeti c, spojili smo ih preko vanjskih ključeva, tj. predmet iz tablice b i sifra iz tablice c. Nakon toga smo postavili uvjet koji će nam iz tablice c (rad) prikazati naziv predmeta koji u sebi sadrži riječ Povijest. Zatim smo se vratili na početak, tj. u select dio te smo upisali imena tablica i stupaca čiji su nam podaci potrebni. Kada to izvedemo dobili smo ime, prezime i naslov rada onog studenta koji je radio svoj rad iz povijesti. Najvažnije je da imate ERA dijagram ispred sebe kako biste znali preko kojih vanjskih ključeva su povezane određene tablice iz kojih želite izvući podatke i da ih pravilno upišete između znaka jednakosti.

U idućem primjeru prikazat ćemo jedan kompliciraniji primjer upita koji prolazi kroz pet tablica. Želimo saznati imena, prezimena, predmet, fakultet i mjesto te naslov rada svih studenata koji su između 18 i 20 godina te ih poredati abecedno po prezimenu. To ćemo učiniti na sljedeći način:

Slika 18. - Komplicirani primjer upita

U ovom primjeru smo počeli od toga da smo napisali select naredbu i ostavili praznu kao i uvijek, zatim smo ispisali from dio i spojili tablice na mjestima gdje postoji podudaranje vanjskih ključeva. Nakon toga smo postavili uvjet where kojem smo rekli da želimo podatke studenata koji su starosti između 18 i 20 godina. Koristili smo klauzulu order by kako bismo ih poredali abecedno prema prezimenu studenta. Na kraju smo se vratili u select dio i upisali imena stupaca iz kojih želimo dobiti podatke.

Kada želimo podatke iz više tablica prikazati u jednoj tada koristimo operater union. On nam kreira novu tablicu i u njoj prikazuje podatke iz potrebnih tablica. Ako želimo u jednoj tablici saznati sva prezimena studenata i profesora tada ćemo iskoristiti union operater.

Slika 19. - Uporaba uporaba union operatora

Union operater nam je vratio sva prezimena studenata i profesora i to bez dupliranja podataka. Ako pogledate tablicu studenti vidjet ćete da postoje dva studenta čije je prezime Ivić. Po potrebi možemo pomoću union operatora izvući podatke iz više tablica, union nije ograničen samo na dvije. Naravno uz operater union možemo koristiti i ostale operatore koje smo prethodno spominjali i prikazivati samo potrebne podatke. To ćemo prikazati u idućem primjeru. Recimo da želimo u jednoj tablici prikazati prezimena svih studenata koji su stariji od 20 godina i imena profesora kojima prezime ne završava na -ić. To ćemo učiniti na sljedeći način:

Slika 20. - Primjer uporabe union operatora s drugim operatorima

U ovom primjeru upisali smo jednostavne select naredbe i postavili uvjete koje smo prethodno naučili te smo između select naredbi dodali operator union i dobili smo željene podatke.

Slijedeći primjer će pokazati primjenu klauzula group by i having, koje se često koriste zajedno i uglavnom kada su u pitanju brojevi. Group by se koristi kada želimo nešto agregirati da bismo to onda sumirali, izvukli prosjek, pronašli najveći ili najmanji broj i slično. Dok having služi za sužavanje izbora. Dakle, u ovom primjeru želimo dobiti sumu godina studenata koji pohađaju Filozofski fakultet, ali da prikazuje samo one rezultate čija suma ne prelazi 50.

Slika 21. - Primjer uporabe group by i having

Kao i kod prijašnjih primjera napisali smo select naredbu, a zatim povezali tablice. Slijedeće smo postavili and uvjet pomoću kojeg smo odredili da želimo fakultet sa sifrom 1, odnosno Filozofski fakultet. Zatim smo grupirali putem sifre fakulteta, zato što je to zajednički podatak svim studentima čiju sumu godina želimo dobiti. Potom smo dodali having te odredili da prikazuje samo one rezultate čija je suma manja od 50. Na kraju smo u select upisali da želimo sumu godina studenata prikazanu kao zbrojGodina. U ovom slučaju je rezultat 41, no, da je bio veći od 50 ne bi se prikazalo ništa, što možete i isprobati tako da umjesto 50 upišete primjerice 40.